Xin chào các bạn trẻ!
Như các bạn đã biết, CNTT ngày càng phát triển mạnh mẽ. Trong đó, điều không thể thiếu được cho sự phát triển đó chính là sự đóng góp của các ... lập trình viên. Tuy nhiên, nếu bạn không có ai định hướng, hay quen ai đã làm trong ngành này thì khó mà biết được mình sẽ cần chuẩn bị hành trang gì???? Vì lý do này mà mình đã mạo muội viết bài này để hướng dẫn và chia sẻ cho các bạn về vấn đề này. Mình viết dựa trên kinh nghiệm + kiến thức non kém của bản thân, nên nếu có cao nhân nào thấy mình "múa rìu qua mắt thợ" thì mong được góp ý ở bên dưới. :D
Mình sẽ tập trung vào các câu hỏi chính dưới đây. Nếu các bạn thấy còn vấn đề gì đang hot mà chưa có bên dưới thì góp ý mình viết thêm về phần đó nhé!
-
Học từ đâu?
-
Học như thế nào?
-
Những kiến thức gì cần học?
-
Mất khoảng bao lâu để có thể tự làm phần mềm, website, hay ứng dụng cho mobile?
-
Xin việc về IT có khó không? Có yêu cầu bằng cấp hay XYZ gì ko?..
1/ Học từ đâu?
Đây là câu hỏi mà mình nhận được nhiều nhất từ các bạn. Trước đây khi mới vào đại học mình cũng phải đối mặt với câu hỏi này. Do vậy, mình hiểu rằng các bạn sẽ khá khó khăn trong việc "Khởi Động Hệ Thống". Hôm nay mình sẽ chia sẻ kinh nghiệm của mình để các bạn tham khảo, hy vọng sẽ giúp ích được các bạn.
Trước hết, mình xin mời các bạn đọc bài viết "Định hướng nghề nghiệp cho sinh viên" tại đây và so sảnh với định hướng hiện tại của các bạn, hoặc là chọn lấy một cái đích. Như các bạn đã biết, chúng ta không thể đến được nơi mà chúng ta ... KHÔNG BIẾT.
Sau khi các bạn đã biết được cái đích là gì thì việc tiếp theo đó là "lộ trình" để tới đích đó. Hay nói cách khác, bạn cần phải vạch ra được những cái cần học để tới được đích đó trước. Ngoài ra, chúng ta cũng cần phải "Đọc kỹ hướng dẫn sử dụng trước khi dùng" ^^. Nghĩa là bạn phải hiểu được "công dụng" của từng cái( Cái này dùng để làm gì? Có cần thiết hay thay thế bằng cái khác được không?). Ví dụ: Bạn muốn trở thành một cao thủ võ lâm về lập trình Web, thì các bạn cần thực hiện như sau:
+ HTML: Cái này buộc phải học và nắm thật chắc. Nó khá dễ để học, bởi vì HTML chỉ là ngôn ngữ đánh dấu. Ngày nay thì các bạn có thể học HTML5( cái này thì lại là ngôn ngữ lập trình rồi. Có thể học sau)
+ CSS: Đây là món giống như "mỹ phẩm" dành cho trang web. 99,9999% các trang web mà các bạn truy cập đều dùng tới cái này. Nó đơn giản cũng là thứ "trang điểm" cho cái web. Bên cạnh đó nó còn giúp chúng ta tạo ra bố cục của trang. Hiện tại đã có CSS-3, thế hệ này khá tân tiến vì có thể cài đặt nhiều hiệu ứng... Học chắc CSS cũng khá lợi cho các bạn khi về sau cần cày các loại võ công khác như: Làm app cho mobile, phần mềm,..( file XML cũng sử dụng các thuộc tính như CSS).
+ Javascript: Nghe thấy cái này có khá nhiều người lầm tưởng "tên gọi khác" của ngôn ngữ Java. Tuy nhiên, nó lại độc lập hoàn toàn với Java đó các bạn. Đây là ngôn ngữ kịch bản( tự nó không chạy được mà phải chạy thông qua trình duyệt web). Nhiệm vụ của Javascript là để xử lý các thao tác của người dùng, tạo hiệu ứng, bắt lỗi ở phía Client. Món này thì bắt buộc chúng ta phải luyện chắc.
+ Jquery: Sau khi luyện xong Javascript thì bạn có thể luyện tầng tiếp theo là "Jquery". Đây là thư viện của Javascript, nó hỗ trợ khá nhiều thứ để giúp chúng ta không phải "to tay, căng não" ra làm. Quả là thiệt thòi nếu bạn không luyện món này ^^.
Sau khi luyện xong: HTML, CSS, Javascript, Jquery thì chúng ta có thể tạo ra giao diện trang web ngon lành + các hiệu ứng + xử lý bắt lỗi....Đây gọi là web tĩnh bởi vì các dữ liệu hiển thị trên web đang được chúng ta "fix cứng", muốn thay đổi thì phải sửa HTML. Chắc rằng các bạn sẽ hỏi: làm thế nào để tạo ra web động? ( Nội dung thay đổi theo cơ sở dữ liệu).
Để xử lý được vấn đề này chúng ta cần cày cuốc 2 loại võ công:
+ Hệ quản trị cơ sở dữ liệu: Món này chuyên dùng lưu trữ dữ liệu như đa số các bạn đã biết. Gồm có các loại phổ biến là: MySQL ( free - mã nguồn mở), MS SQL Server( hàng của Microsoft, có bản free và bản có phí), Oracle ( hàng này khá đắt tiền nhưng được cái tiếng bảo mật cao, ngân hàng rất ưa thích. hehe).
+ Ngôn ngữ lập trình phía máy chủ( server): Đây là phần giúp chúng ta xử lý các request( yêu cầu) từ phía người dùng và load dữ liệu từ Server rồi hiển thị lên trình duyệt cho chúng ta xem. Hiện nay có các ngôn ngữ phổ biến là: ASP.Net( hàng của Microsoft, tồn tại ở 3 thể: web page, Web form, MVC. Code bằng 25 ngôn ngữ được: C#, Vb.net,..), PHP( cái này facebook sử dụng đó các bạn, nó là nguồn mở + free, có nhiều CMS hỗ trợ nó), JSP( code bằng Java), NodeJS,... Các bạn cần chọn cho mình một món ưa thích. Chú ý: điều kiện chọn = sở trường + nhu cầu thị trường + khả năng phát triển tương lai. Sau khi chọn 1 cái rồi thì tập trung cày cuốc cho ra... sản phẩm. Bởi lẽ tới đây chúng ta hoàn toàn có thể tung hoành giang hồ với Web rồi. Muốn lên thần thì không còn cách nào khác đó là phải... Luyện Công, càng làm nhiều web thì bạn càng nhanh lên Level. Khi thấy web đã ổn ổn thì các bạn nên tìm mua: Domain + hosting( mua gói cá nhân vài trăm k thôi) để upload lên host, public cho mọi người được :D
Như vậy là mình đã vẽ một "lộ trình" cho các bạn thích web. Nếu bạn nào đó đang gặp áp lực thời gian, kiểu n-tháng phải có sản phẩm thì các bạn cần kèm theo 1 kế hoạch học tập. Kiểu như: HTML - 1 tuần, CSS - 1 tuần,... và cố gắng theo đúng cái plan đó. Tiếp theo mình sẽ hướng dẫn các bạn theo các con đường khác: Phần mềm, Ứng dụng Mobile, Game.
Về phần mềm, ứng dụng mobile: các cần luyện các loại võ công: Ngôn ngữ lập trình cơ bản(C là ứng cử viên sáng giá nhất), Cấu trúc dữ liệu và giải thuật, Phân tích thiết kế hệ thống, Hệ quản trị cơ sở dữ liệu, Lập trình hướng đối tượng, Lập trìn giao diện người dùng(UI), Design pattern( Các mẫu thiết kế để tạo ra hệ thống dễ bảo trì nâng cấp), ...
+ Ngôn ngữ lập trình cơ bản: Cái này buộc các bạn phải nắm thật chắc. Bởi lẽ nó xuyên suốt quá trình học tập + hành nghề của các bạn. Cụ thể ở đây, các bạn chỉ cần học thật chắc ngôn ngữ C, làm nhiều bài tập thực hành để nhớ được nhiều hàm, nắm vững được cách giải các bai toán nhỏ. Đây là điểm xuất phát của các bạn. Có khá nhiều bạn thích học kiểu "đốt cháy giai đoạn", kiểu như: Học thẳng vào Java, C#, C++,... Như vậy sẽ khiến cho khởi đầu của các bạn khó khăn hơn nhiều. Nguyên nhân là: Các ngôn ngữ lập trình cấp cao đều ra sau và xây dựng dựa trên cú pháp tương đồng với C, nhưng nó đã thêm vào đó nhiều khái niệm mới + cách viết Hướng Đối Tượng. Do đó, khi ngay từ đầu các bạn đã học chúng sẽ khiến bạn dễ rơi vào tình trạng "tẩu hỏa nhập ma". Tuy nhiên, cũng có bạn thắc mắc rằng: "Học C rồi mới học ngôn ngữ khác có mất thời gian quá không khi phải đi kiểu đường vòng?". Câu trả lời là "KHÔNG", như mình đã nói ở trước đó, cú pháp của C rất giống với các ngôn ngữ khác( C++, C#, Java,..) nên khi các bạn nắm chắc C thì sang bên ngôn ngữ kia chúng ta ko phải mất công học lại nó nữa. Ngoài ra học C từ đầu sẽ cho bạn có cảm giác đơn giản, dễ hiểu, tránh được những thứ khác liên quan mà chưa cần tới khi các bạn bắt đầu.
+ Cấu trúc dữ liệu và giải thuật: Đây là môn có thể coi là "nội công" dành cho lập trình viên. Không ai giỏi lập trình mà lại không luyện món này. Tuy nhiên, có khá khá các bạn khi học môn này trên lớp lại tỏ ra "sợ hãi". Thực ra nó không đáng sợ như nhiều bạn nghĩ. Để vượt qua sợ hãi, bạn hãy đọc câu thần chú: "Những gì người khác làm được thì mình cũng sẽ làm được, những gì người khác không làm được chưa chắc mình đã không làm được" ^^. Nghĩa là bạn cần phải có niềm tin vào chính mình, mình không tin được mình thì ai có thể tin mình đây! Đó là vấn đề tâm lý, các bạn phải giải quyết gọn. Quay về chủ đề chính, môn võ này như tiêu đề của nó chia làm 2 phần: 1- Cấu dữ liệu liệu, 2 - giải thuật. Phần 1 giúp chúng ta có một cái nhìn tông quan và cách tạo ra cách lưu trữ những thông tin cần để xử lý bài toán. Ví dụ: Để lấy nước từ một cái giếng sâu 10m thì chúng ta cần những gì? Trước hết là: 1 cái dây dài tối thiểu 10m, 1 cái gầu múc nước, một cái xô chậu đựng nước... Trong khi lập trình cũng vậy, chúng ta cần thiết kế sao cho có đủ công cụ để lưu trữ, và làm sao cho phù hợp với yêu cầu bài toán. Phần 2 nói về cách giải quyết vấn đề dựa trên các thông tin được cung cấp, gọi tắt là giải thuật. Ở trong tài liệu đã có giải thuật cho từng loại vấn đề thông dụng. Chẳng hạn như: Sắp xếp, tìm kiếm,... được các nhà khoa học nghiên cứu ra rồi. Việc của chúng ta là đọc và hiểu nó rồi áp dụng linh hoạt vào trường hợp cụ thể. Đây chính là lời giải cho những bạn băn khoăn "không biết chuyển từ vấn đề thực tế vào Code thế nào?". Như vậy thấy môn này cũng khá thú vị đó chứ :D
+ Phân tích thiết kế hệ thống: Môn này cũng thuộc dạng "nội công" cho lập trình viên. Với cấu trúc dữ liệu và giải thuật thì chúng ta có thể xử lý vấn đề cụ thể rồi. Tuy nhiên, như vậy chưa đủ để chúng ta làm được sản phẩm hoàn thiện. Bở lẽ chúng ta sẽ không hình dung ra "đứa con tinh thần" của mình sẽ có "hình hài, vóc dáng" ra sao? Chính môn này sẽ giúp chúng ta làm sáng tỏ "mặt mũi đứa con tinh thần" của mình. Hiện nay có các phương pháp phân tích đó là: Phân tích thiết kế hướng chức năng( có từ rất lâu), Phân tích thiết kế hướng đối tượng UML( cái này ra sau hướng chức năng và khá phổ biến hiện nay). Sử dụng phương pháp nào cũng đề cho chúng ta được các chức năng của hệ thống, mối liên hệ giữa các thành phần,... cuối cùng ra được cơ sở dữ liệu đáp ứng được các yêu cầu của hệ thống.
+ Hệ quản trị cơ sở dữ liệu: Đây là môn học mà chúng ta cũng buộc phải nắm vững. Công dụng chính của nó là: Lưu trữ dữ liệu và hỗ trợ truy vấn dữ liệu. Ở phần này các bạn cần nắm được các thao tác cơ bản như: tạo cơ sở dữ liệu, tạo bảng, tạo thủ tục, tạo view, truy vấn các dữ liệu theo điều kiện, sao lưu, phục hồi,... Nghe thì nhiều nhưng môn công phu này khá là dễ luyện. Hiện tại có 3 hệ quản trị dữ liệu phổ biến là: MS SQLServer, Oracle, MySQL. Bên cạnh hệ quản trị dữ liệu còn có cơ sở dữ liệu không quan hệ như: Sqlcompact( của MS), SQlite( cái này rất phổ biến cho các bạn làm app mobile, game).
+ Lập trình hướng đối tượng: Đây không phải là "ngôn ngữ lập trình" như một số bạn hiểu lầm. Nó là một "phương pháp lập trình". Nếu các bạn đã biết C hoặc Pascal thì đó chính là ngôn ngữ lập trình theo phương pháp "Lập trình hướng chức năng" hay có người còn gọi là "lập trình hướng thủ tục". Sở dĩ gọi như vậy là vì: Chương trình viết bằng C/Pascal được chia thành các hàm/thủ tục, sau đó ở chương trình chính sẽ có một hàm "main"(C), hoặc là "Begin - End" (Pascal) để gọi các hàm kia. Nhìn chung cách này cũng khá rõ ràng + tách biệt, có thể phân chia mỗi người 1 hàm/thủ tục trong trường hợp làm nhóm. Tuy nhiên, phương pháp này cần sử dụng các biến toàn cục cho cả chương trình. Do đó, khi ở đâu đó thay đổi giá trị của biến đó mà không kiểm soát kỹ sẽ gây tới lỗi cả hệ thống. Hay nói cách khác: phương pháp này tách rời dữ liệu và xử lý dữ liệu. Từ đó làm cho việc bảo trì, nâng cấp khá khó khăn và vất vả. Chính vì điều này mà người ta đã tạo ra phương pháp lập trình mới khắc phục các nhược điểm đó, đó là "Lập trình hướng đối tượng". Với phương pháp này, dữ liệu và xử lý dữ liệu được gói vào trong một thành phần gọi là Class(Lớp), các class lại có thể được gói lại thành Package(Java)/Namespace(C#,C++), các gói nhỏ lại có thể gói với nhau thành gói to hơn... Từ đó sẽ làm cho chương trình của chúng ta có tính chất: Đóng gói và bao bọc thông tin. Bên cạnh đó, khi viết xong một thành phần, chúng ta có thể sử dụng lại nó và thêm vào những thứ khác. Đây gọi là tính "kế thừa". Ngoài ra, một hàm/thủ tục(method) có thể viết cùng tên nhưng khác nhau về chức năng xử lý, hoặc ở cha và con khác nhau. Đây gọi là tính "Đa hình". Tổng kết: với các tính chất nổi bật: Đóng gói, kế thừa, đa hình đã làm cho lập trình hướng đối tượng trở nên ưu việt.
+ Lập trình giao diện người dùng: Đây là phần rất hấp dẫn và dễ học. Phần này cho phép chúng ta tạo ra các giao diện tùy thích với các màu sắc và kích thước khác nhau. Mở rộng của nó là việc sử dụng các thư viện hỗ trợ việc tạo ra nó. Chẳng hạn khi làm phần mềm .Net chúng ta sẽ có các thư viện nổi tiếng như: Devexpress, Dotnetbar, Janus,...chúng sẽ giúp chúng ta tạo ra các giao diện phức tạp + đẹp long lanh :D. Phần này chúng ta chỉ cần nắm được tên gọi của các Control + công dụng + thuộc tính của nó là ổn. Do vậy mình sẽ không bàn thêm nhiều về phần này.
+ Mô hình lập trình: Tiêu biểu của phần này là các mô hình lập trình như: mô hình 3 lớp, MVC, MVVM, MVP. Các mô hình đó giúp cho cấu trúc của chương trình trở nên sáng sủa, dễ bảo trì, nâng cấp, giảm đáng kế số lượng dòng code.
+ Design Patterns( Mẫu thiết kế): Đây là phần nâng cao, đòi hỏi chúng ta phải nắm chắc lập trình cơ bản, lập trình hướng đối tượng trước khi luyện nó. Nó là một kỹ thuật trong lập trình hướng đối tượng, nó khá quan trọng và mọi lập trình viên muốn giỏi đều phải biết. Được sử dụng thường xuyên trong các ngôn ngữ OOP( lập trình hướng đối tượng). Nó sẽ cung cấp cho bạn các “mẫu thiết kế”, giải pháp để giải quyết các vấn đề chung, thường gặp trong lập trình. Các vấn đề mà bạn gặp phải có thể bạn sẽ tự nghĩ ra cách giải quyết nhưng có thể nó chưa phải là tối ưu. Design Pattern giúp bạn giải quyết vấn đề một cách tối ưu nhất, cung cấp cho bạn các giải pháp trong lập trình OOP. Hiện tại có 23 mẫu phổ biến chia thành 3 nhóm.
Creational Pattern (nhóm khởi tạo) gồm: Abstract Factory, Factory Method, Singleton, Builder, Prototype. Nó sẽ giúp bạn trong việt khởi tạo đối tượng, như bạn biết để khởi tạo bạn phải sử dụng từ khóa new, nhóm Creational Pattern sẽ sử dụng một số thủ thuật để khởi tạo đối tượng mà bạn sẽ không nhìn thấy từ khóa này.
Structural Pattern (nhóm cấu trúc) gồm: Adapter, Bridge, Composite, Decorator, Facade, Proxy và Flyweight.. Nó dùng để thiết lập, định nghĩa quan hệ giữa các đối tượng.
Behavioral Pattern gồm: Interpreter, Template Method, Chain of Responsibility, Command, Iterator, Mediator, Memento, Observer, State, Strategy và Visitor. Nhóm này dùng trong thực hiện các hành vi của đối tượng.
Trên đây là "lộ trình" dành cho các muốn theo con đường lập trình phần mềm, ứng dụng mobile. Tiếp theo mình sẽ hướng dẫn cách học như thế nào cho hiệu quả và nắm vững kiến thức.
Học Như Thế Nào?
Ở phần trên minh đã vẽ ra "lộ trình" cho các bạn. Vấn đề bây giờ là phương pháp học để đi tới đích như ý muốn. Như các bạn đã biết: "Vạn sự khởi đầu nan". Do vậy, chúng ta cần cố gắng vượt qua ải này. Trước hết, chúng ta cần có sự chuẩn bị về: sức khỏe, thời gian, tài liệu, máy móc, phương pháp và một kế hoạch học tập.
Về sức khỏe các bạn trẻ chắc khỏi phải bàn rồi. Thời gian có lẽ là vấn đề khá lớn đối với các bạn. Mình khá nhiều bạn chưa biết quý trọng thời gian, thứ mà tiền không thể mua được. Vậy mà có bạn là suốt ngày Online, online và online..., bán hoặc tặng thời gian cho Facebook, Game,... một cách không thương tiếc. Nếu ai đang trong tình trạng này thì các bạn nên hạn chế dần nhé. Bản thân mình cũng xài facebook, cũng xem phim, cũng xài zalo, xem phim,... nhưng mình luôn cân đối thời gian. Chẳng hạn mỗi ngày chỉ dùng facebook từ 30 phút tới 1h thôi. Hoặc treo nó ở đó vào buổi tối nhưng ko dán mắt vào đấy. Có lẽ các bạn chưa để ý ông chủ Facebook, người tạo ra cỗ máy ngốn thời gian, vẫn chăm chỉ đọc rất nhiều sách, tiết kiệm thời gian tới mức "mặc các bộ quần áo kiểu giống nhau để khỏi phải mất time chọn lựa ^^". Do vậy, mỗi tối các bạn cần dành tối thiểu 2h cho việc học tập hoặc làm những gì có ích. Nếu bạn đang là sinh viên thì thời gian này cần tăng lên tùy thuộc vào cố gắng của bạn. Tất nhiên bạn cố gắng nhiều thì sẽ cày cuốc nhanh hơn thôi.
Về tài liệu: Hiện nay các bạn khá thuận lợi về khoản này. Tới mức nhiều người thốt lên: "Nhiều tài liệu quá không biết chọn cái nào?" LOL. Tuy nhiên các bạn hãy xem xét mục lục và chọn ra chỉ 1 tài liệu mà thôi, còn các tài liệu khác thì nên để sau khi luyện xong 1 cái trước đã. Tránh trường hợp luyện kiểu xen kẽ cuối cùng chẳng đâu vào đâu. Ở trên web laptrinh123.com mình upload khá nhiều tài liệu lập trình phổ biến, các bạn có thể vào đó tải về tại lập trình 123 .Chú ý: Nên học tài liệu bản cứng( sách) sẽ hiệu quả hơn bản ebook. Hoặc nếu ebook thì các bạn nên sắm thêm cái màn hình nữa để một cái mở sách, một cái code. :D
Về máy móc: Khoản này bây giờ các bạn khá thuận tiện rồi. Tuy nhiên, cũng cố gắng chăm sóc cho máy móc ngon lành tí. Đặc biệt, nên sắm thêm một màn hình để sửa dụng 2 màn hình độc lập. Điều này sẽ thuận tiện khi các bạn học tập. Chẳng hạn: 1 màn hình mở tài liệu/Video, source code tham khảo... một bên là màn hình mình code. Ngoài ra cố gắng nâng cấp Ram lên >=8Gb để cho việc cài đặt các công cụ và chạy được ngon lành. Nếu điều kiện cho phép thì lắp thêm ổ cứng SSD 120Gb( khoảng >=800k là có thể lắp rồi) để cài Win + các dữ liệu hay dùng. Nó sẽ giúp bạn tiết kiệm khá nhiều thời gian.
Về kế hoạch học tập: các bạn nên có một kế hoạch học tập dựa vào "lộ trình" mình hướng dẫn ở trên. Đơn giản là ghi ra file Excel hoặc là Note rồi dán lên tường. Kế hoạch to theo từng ngày, tháng, năm... Mình thường ghi công việc cần làm trong ngày ra một cái Note, sau đó cứ nhìn vào đó thực hiện thôi. Việc viết bài chia sẻ này cũng nằm trong "note" của mình đó. LOL. Có một câu nói khá nổi tiếng đó là: "Không lập kế hoạch nghĩa là bạn đã lập kế hoạch cho Thất Bại".
Phương pháp học tập: đây là phần mà các bạn gặp nhiều trở ngại nhất. Có nhiều người nghĩ cứ "cắm đầu cắm cổ code và code suốt liệu có thành cao thủ sớm chăng?". Thực sự thì chăm chỉ là điểu kiện cần. Tuy nhiên chúng ta vẫn cần có chiến thuật. Khổng Tử có câu: "Học mà không suy nghĩ thì sai lầm, suy nghĩ mà không học thì nguy hiểm". Với IT chúng ta cũng không ngoại lệ. khi học code chúng ta không phải học "thuộc lòng", và cũng không thể học thuộc lòng được. Do vậy, khi học chúng ta cũng cần có thời gian ngẫm nghĩ để hiểu về nó. Khi bắt đầu học thì các bạn làm theo cách này: chạy được ví dụ trước. Thông thường chúng ta thấy 99,99% các ngôn ngữ lập trình đều có một chương trình kinh điển "Hello world". Chúng ta chỉ cần cài đặt làm sao để chạy được nó và nhìn thấy dòng "Hello World" là thở phào nhẹ nhõm rồi. Sau khi chạy được nó thì chúng ta mới bắt đầu "soi" từ đầu tới cuối từng dòng, từng chữ và đọc tài liệu về nó. Các bạn sẽ nhận thấy các dòng code của chúng ta sẽ không hề có chữ tiếng Việt nào hết. Lúc này vấn đề khác sẽ xuất hiện ngay. Đó chính là Tiếng Anh. Đây sẽ là lúc phân biệt tốc độ cày cuốc của chúng ta. Nếu tiếng Anh của bạn khá, toán bạn cũng khá thì việc học Code nhẹ tựa lông hồng. Và tất nhiên khi mình mới học code thì nhẹ tựa...........tảng đá ^^. Bởi lẽ tiếng Anh hồi phổ thông mình chỉ học hệ 3 năm(10-12), lại xuất thân 7 đời nông nghiệp ở miền núi, các bạn tưởng tượng điều kiện học phổ thông của mình ra sao khi tốt nghiệp THPT tỉ lệ tốt nghiệp với tiêu chí 2-0 là 10,5%. Về tin học thì ở trường mình cũng KHÔNG có gì luôn, mình chỉ biết chat Yahoo, mà cái nick cũng có biết lập đâu( thằng bạn ở gàn trường nó lập cho). Quay trở về vụ tiếng Anh này, mình đã khắc phục bằng việc ghi các từ mới ra một quyển sổ, sau đó tra nghĩa của nó rồi học thuộc. Việc biết nghĩa các từ tiếng Anh cực kỳ quan trọng, nó giúp chúng ta vừa hiểu + dễ nhớ hơn. Ví dụ: bạn thường thấy đặt tên biến là: n, i, hay tên mảng là "a",... tất cả chúng đều có nghĩa cả. Chẳng hạn: n=number, i=index( chỉ số), a=array(mảng),.. như vậy là ngay lập tức bạn đã thấy việc code trở nên thân thiện. Vì thế mà ngay từ khi các bạn đọc xong bài này mà tiếng Anh chưa tốt, hãy lập tức dành cả thời gian để luyện tiếng Anh( ít nhất là tiếng anh chuyên ngành). Tối thiếu là phải luyện để đọc hiểu được các tài liệu về IT, còn giao tiếp luyện được thì càng tốt. Nhưng đừng lo, mình thấy tiếng Anh chuyên ngành chúng ta khá là dễ học + ít từ mới, chỉ cần chăm chỉ chút là ổn thôi.
Đó là phần học khởi đầu các bạn nên học kiểu đó. Khi các bạn đã có kiến thức lập trình cơ bản rồi thì tới lúc các bạn nên nghĩ về một sản phẩm mà các bạn sẽ làm. Chẳng hạn: Bạn thích làm phần mềm Abc, website kiểu xyz, hay app, game gì đó...Từ bước này hãy tìm hiểu về nó, sử dụng phân tích thiết kế hệ thống để "vẽ" nó ra sáng tỏ hơn. Sau đó là lên kế hoạch thực hiện nó. Phần thực hiện các bạn có thể để thời gian thoải mái chút vì các bạn đang chơi chiến thuật "vừa làm vừa học". Khi khâu chuẩn bị đã Ok thì các bạn chỉ việc thực hiện nó thôi. Mình đảm bảo là cách học này sẽ gúp cho các bạn lên Level cực nhanh + kiến thức rất chắc. Chú ý trong giai đoạn này là: Những gì bạn có thể làm được thì KHÔNG được copy-paste code, nếu bạn làm vậy giai đoạn này sẽ hại bạn đấy. Chỉ khi nào bạn đã tự tin thành thạo, kiểu đi làm cty thì chúng ta thoải mái copy-paste. Nếu thấy bí giải pháp thì nên tìm rồi tự thực hiện là ok. Hoặc có thể hỏi trên group facebook "Học lập trình qua bài tập" về hướng xử lý, mình và mọi người sẽ hỗ trợ nhiêt tình :D. Phần sản phẩm này hãy cố gắng làm tốt nhất có thể để có thể kiếm tiền, hoặc làm sản phẩm Demo khi bạn đi xin việc( nếu bạn nào có khả năng làm chủ luôn sau khi ra trường thì xin phép mình chưa đủ trình để góp ý. hehe). Điều đặc biệt ở đây là khi hoàn thiện rồi các bạn sẽ có được một cái nhìn tổng quát về lập trình, về việc tạo ra một sản phẩm. Từ đó các bạn sẽ vượt qua được "giới hạn" ngôn ngữ lập trình. Nghĩa là bạn sẽ có được suy nghĩ "Làm bằng ngôn ngữ gì không quan trọng, quan trọng là làm được cái gì? hehe". Và thực tế khi đi làm các bạn cũng thấy thế, không những ngôn ngữ mà khách hàng còn nói: "làm thế nào giải quyết được vấn đề của họ, đáp ứng và làm thỏa mãn họ là ok", người ta dâu có biết chúng ta dùng ngôn ngữ hay công nghệ gì, có nói thì họ cũng "uh, uh.." cho xong thôi. Hy vọng khi đọc tới đây mỗi bạn sẽ hiện lên trong đầu một "phần mềm, website, app, hay game" gì đó, và "hiện thực hóa" nó được. Khi các bạn làm được điều đó hãy chia sẻ để giúp đỡ người khác cùng tiền bộ nhé! :D
Ngoài ra, các bạn cũng có thể áp dụng học bằng cách "tham khảo code của người khác". Đây là cách được khá nhiều người dùng. Cách này đơn giản là chạy chương trình người khác làm rồi mình xem từng kỹ thuật họ làm, so sánh với những cách bản thân mình đã nghĩ ra. Từ đó thấy được ưu, nhược điểm => Nạp vào kinh nghiệm bản thân. Khi các bạn gặp lỗi hay vướng mắc thì ngoài việc search Google, các bạn có thể tham gia vào các diễn đàn lập trình Anh/Việt, hoặc các group trên facebook để trao đổi. Học Lập Trình Qua Bài Tập là group trao đổi các vấn đề vướng mắc trong quá trình học lập trình, các bạn có thể Join group để được hỗ trợ. Chú ý: Chỉ nên tìm kiếm sự trợ giúp khi bản thân thấy "bó cánh" nhé, làm như vậy để phát huy khả năng sáng tạo, tránh lười biếng. hehe
Các website nước ngoài nổi tiếng mà các bạn nên biết là: Website chuyên giải đáp các vấn đề khoai của IT Nhân loại: http://stackoverflow.com/, Website có nhiều source code tham khảo: http://www.codeproject.com/, dành cho các bạn cày .Net: https://msdn.microsoft.com/en-us/, dành cho các bạn học Web( web này code + xem kết quả ngay trên đó): http://www.w3schools.com/, Website học các ngôn ngữ dạng slide: http://www.tutorialspoint.com. Trang chủ của các ngôn ngữ, công nghệ các bạn học: Mỗi công nghệ đều có trang web riêng, ở đó có tài liệu đầy đủ + hỗ trợ rõ. Chỉ cần lên đó cày cuốc thôi. Ví dụ: http://jquery.com/, https://www.devexpress.com/, ...
Những kiến thức gì cần học?
Ở phần này mình sẽ nói tổng quát những kiến thức các bạn cần học để có hành trang tốt cho tương lai. Bên cạnh "kỹ năng cứng" thì "kỹ năng mềm" là phần không thể thiếu được. Nó quyết định tới tương lai của chúng ta rất nhiều. Có khá nhiều câu chuyện xoay quanh kỹ năng mềm mà các bạn sẽ thấy rằng nó quan trọng thế nào. Ở phần kỹ năng mềm các bạn cần học: kỹ năng giao tiếp, xử thế, làm việc nhóm, thái độ khi tiếp cận vấn đề,...Tiếp tới là Tiếng Anh, cái này có thành tích thì càng tốt + xin việc sẽ được ưu ái hơn. Bên cạnh đó mình cũng khuyên các bạn nên tìm đọc cách cuốn sách về kỹ năng sống, kinh tế, hay gì đó về những thứ mà các bạn quan tâm. Việc đọc sách sẽ giúp các bạn có thêm động lực + cái nhìn rộng mở hơn.
Mất khoảng bao lâu để có thể tự làm phần mềm, website, hay ứng dụng cho mobile?
Cũng có khá nhiều bạn hỏi mình câu hỏi trên nên mình cũng chia sẻ luôn ở đây để các bạn khỏi thắc mắc. Quả thật rất khó để trả lời chính xác câu hỏi này. Bởi lẽ nó phụ thuộc vào nhiều yếu tố. Trước hết: quy mô của phần mềm, website, hay app là to hay nhỏ? Tiếp đến là: độ khó của nó ra sao? Sau nữa là: Công nghệ sử dụng là gì? Đấy là các yếu tố khách quan. Còn chủ quan thì phụ thuộc vào: Thời gian cày cuốc của mỗi người, vốn tự có của người đó( IQ, mối quan hệ,..). Tuy nhiên, nếu xuất phát điểm là số 0 thì cần khoảng 4,5 tháng trở lên mới có sản phẩm được. Với trường hợp làm website thì nếu sử dụng mà nguồn mở thì chỉ mất vài tuần thôi. Tuy nhiên cái này chẳng code gì nên mình ko bàn nhiều. Ý mình nói ở đây là sản phẩm xài được trong thực tế các bạn nhé! Nhưng thời gian như vậy mình nghĩ là các bạn hoàn toàn đủ luyện trước khi ra trường.
Xin việc về IT có khó không? Có yêu cầu bằng cấp hay XYZ gì ko?
Về vấn đề việc làm thì các bạn yên tâm. Điều các bạn cần lo là "kiến thức, kinh nghiệm làm việc". Có khá nhiều bạn thắc mắc: "Mới ra trường thì lấy đâu ra kinh nghiệm?". Mình xin đính chính lại rằng: Kinh nghiệm của các bạn không phải tính từ lúc các bạn ra trường mà phụ thuộc vào những thứ, thời gian các bạn làm sản phẩm. Bạn mới ra trường cũng có thể có 2,3 năm kinh nghiệm là bình thường. Ngoài ra: những sản phẩm các bạn làm trong quá trình "luyện công", làm đồ án,luận văn,.. hãy làm cho thật tốt để lấy đó cho vào CV gửi nhà tuyển dụng. Họ sẽ rất thích thú và yên tâm khi thấy các ứng viên đã từng làm sản phẩm. Khi làm CV xin việc thì chú ý trình bày cho ngon lành và làm sao nổi bật những cái mà nhà tuyển dụng bạn đang cần. Mình đã từng xem CV của bạn trẻ ghi những thứ chẳng liên quan tới IT kiểu như: quá trình tham gia đoàn, đảng, làm thêm ở những chỗ ko liên quan IT,... cái đó chỉ nên ghi chú thêm mà thôi. Các bạn nhớ chủ ý khoản đó nhé. Nếu như bạn nào trong quá trình học vẫn thấy thiếu kiến thức chưa đủ tự tin xin việc thì giải pháp "thực tập" có lẽ là rất phù hợp. Trong thời gian thực tập học hỏi thêm và chứng tỏ được khả năng học hỏi của bạn thì không lý gì công ty lại ko nhận bạn. Một cách khá hữu hiệu cho các bạn sinh viên là xem yêu cầu công việc ở các trang tuyển dụng nổi tiếng như:http://https://www.careerlink.vn, https://itviec.com, http://www.vietnamworks.com, ...bằng đó trang đủ để cho các bạn lướt thoải mái rồi. Khi lướt trên đó các bạn search những cái mà các bạn đang cày cuốc để xem yêu cầu của họ. Từ đó đặt mục tiêu + cày cuốc theo các yêu cầu đó, sao cho trước khi ra trường các bạn đáp ứng được. Điều này vừa giúp bạn nâng cao kiến thức vừa giúp các bạn biết xu thế công việc hiện tại.
Tiếp đến là vấn đề bằng cấp Xyz: Khoản này mình nhận thấy các công ty công nghệ không để ý tới bằng của bạn có "đẹp" hay không? Nghĩa là bằng khá, giỏi, hay trung bình không quan trọng. Điều họ cần chỉ đơn giản là: Bạn làm được việc, đáp ứng được yêu cầu của cty. Do vậy, đừng cố cày cuốc kiểu "điểm trác" nhé các bạn trẻ. Thậm chí có công ty còn không yêu cầu bằng tốt nghiệp Đại Học, chẳng hạn Gameloft là cty khá lớn nhưng nhiều bạn trẻ vào đó vẫn chưa ra trường. Vấn đề xin việc IT thì được lợi khoản không phải "phong bì" gì hết. Vì thế so với các ngành khác thì chúng ta khá thuận lợi.
P/s: Bài viết dựa trên kinh nghiệm cá nhân của mình và văn chương lủng củng. Do vậy mong các bạn thông cảm. Nếu như các bạn thấy vấn đề gì bản thân thắc mắc mà chưa thấy mình chia sẻ thì các bạn vui lòng để lại comment bên dưới, mình sẽ giải đáp trong khả năng có thể. :D
MrFour